package com.lanyun.carworld.controller.user;

import com.lanyun.carworld.common.BaseResponse;
import com.lanyun.carworld.common.ResultUtils;
import com.lanyun.carworld.model.dto.user.ChangePasswordRequest;
import com.lanyun.carworld.model.dto.user.UserLoginRequest;
import com.lanyun.carworld.model.dto.user.UserRegisterRequest;
import com.lanyun.carworld.model.vo.LoginUserVO;
import com.lanyun.carworld.model.vo.UserVO;
import com.lanyun.carworld.service.UserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@RestController("userController")
@RequestMapping("/user")
@Api(tags = "用户相关接口")
@Slf4j
public class UserController {

    @Resource
    private UserService userService;


    //1. 用户注册接口
    /**
     * 用户注册接口
     * @param request
     * @return
     */
    @PostMapping("/register")
    @ApiOperation("用户注册")
    public BaseResponse<Boolean> register(@RequestBody UserRegisterRequest request) {
         log.info("用户注册:{}", request);


         Boolean result = userService.userRegister(request);


         return ResultUtils.success(result);
    }

    //2. 用户登录接口
    /**
     * 用户登录接口
     * @param request
     * @return
     */
    @PostMapping("/login")
    @ApiOperation("用户登录")
    public BaseResponse<LoginUserVO> login(@RequestBody UserLoginRequest request){
        log.info("用户登录:{}", request);

        LoginUserVO loginUserVO = userService.userLogin(request);

        return ResultUtils.success(loginUserVO);
    }


    //3. 用户信息修改接口
    /**
     * 用户信息修改接口
     * @param userVO
     * @return
     */
    @PostMapping("/modification/message")
    @ApiOperation("用户信息修改")
    public BaseResponse<Boolean> info(@RequestBody UserVO userVO){
        log.info("用户信息修改:{}", userVO);

        Boolean result = userService.updateUserInfo(userVO);

        return ResultUtils.success(result);
    }

    //4. 用户信息查询接口
    /**
     * 用户信息查询接口
     * @return
     */
    @GetMapping("/info")
    @ApiOperation("用户信息查询")
    public BaseResponse<UserVO> info(){
        log.info("用户信息查询");

        UserVO loginUserVO = userService.getUserInfo();

        return ResultUtils.success(loginUserVO);
    }

    //5. 用户密码修改接口
    /**
     * 用户输入账号密码准备修改密码接口
     * @param request
     * @return
     */
    @PostMapping("/predefine/correctness")
    @ApiOperation("用户密码修改")
    public BaseResponse<Boolean> password(@RequestBody UserLoginRequest request){
        log.info("用户密码修改:{}", request);

        Boolean result = userService.predefinePassword(request);

        return ResultUtils.success(result);
    }


    /**
     * 修改密码
     * @param request
     */
    @PostMapping("/modification/password")
    @ApiOperation("用户密码修改")
    public BaseResponse<Boolean> modifyPassword(@RequestBody ChangePasswordRequest request){
        log.info("用户密码修改:{}", request);

        Boolean result = userService.modifyPassword(request);


        return ResultUtils.success(result);
    }

    //6. 用户密码重置接口
    //7. 用户注销接口
    //8. 用户头像上传接口
    //9. 用户头像下载接口
    //10. 用户收藏夹接口
    //11. 用户购物车接口
    //12. 用户订单接口
    //13. 用户评价接口
    //14. 用户消息接口
    //15. 用户积分接口
    //16. 用户优惠券接口
    //17. 用户优惠码接口
    //18. 用户分享接口
    //19. 用户留言接口
    //20. 用户反馈接口

    //21. 用户意见接口
    //22. 用户投诉接口
    //23. 用户举报接口
    //24. 用户举报处理接口
    //25. 用户举报查询接口
    //26. 用户举报统计接口
    //27. 用户积分兑换接口
    //28. 用户积分查询接口
    //29. 用户积分流水接口
    //30. 用户积分规则接口
    //31. 用户积分规则设置接口
    //32. 用户积分规则查询接口
    //33. 用户积分规则删除接口
    //34. 用户积分规则启用接口
    //35. 用户积分规则禁用接口
    //36. 用户积分规则修改接口
    //37. 用户积分规则新增接口
    //38. 用户积分规则导出接口
    //39. 用户积分规则导入接口
    //40. 用户积分规则模板接口
    //41. 用户积分规则模板新增接口
    //42. 用户积分规则模板删除接口
    //43. 用户积分规则模板修改接口
    //44. 用户积分规则模板启用接口
    //45. 用户积分规则模板禁用接口
    //46. 用户积分规则模板查询接口
    //47. 用户积分规则模板导出接口
    //48. 用户积分规则模板导入接口
    //49. 用户积分规则模板模板接口
    //50. 用户积分规则模板模板新增接口
    //51. 用户积分规则模板模板删除接口
    //52. 用户积分规则模板模板修改接口
    //53. 用户积分规则模板模板启用接口
    //54. 用户积分规则模板模板禁用接口
    //55. 用户积分规则模板模板查询接口
    //56. 用户积分规则模板模板导出接口
    //57. 用户积分规则模板模板导入接口
    //58. 用户积分规则模板模板模板接口
    //59. 用户积分规则模板模板模板新增接口
    //60. 用户积分规则模板模板模板删除接口
    //61. 用户积分规则模板模板模板修改接口
    //62. 用户积分规则模板模板模板启用接口
    //63. 用户积分规则模板模板模板禁用接口
    //64. 用户积分规则模板模板模板查询接口
    //65. 用户积分规则模板模板模板导出接口
    //66. 用户积分规则模板模板模板导入接口
    //67. 用户积分规则模板模板模板模板接口
    //68. 用户积分规则模板模板模板模板新增接口
    //69. 用户积分规则模板模板模板模板删除接口
    //70. 用户积分规则模板模板模板模板修改接口
    //71. 用户积分规则模板模板模板模板启用接口
    //72. 用户积分规则模板模板模板模板禁用接口
    //73. 用户积分规则模板模板模板模板查询接口
    //74. 用户积分规则模板模板模板模板导出接口
    //75. 用户积分规则模板模板模板模板导入接口
    //76. 用户积分规则模板模板模板模板模板接口
    //77. 用户积分规则模板模板模板模板模板新增接口
    //78. 用户积分规则模板模板模板模板模板删除接口
    //79. 用户积分规则模板模板模板模板模板修改接口
    //80. 用户积分规则模板模板模板模板模板启用接口
    //81. 用户积分规则模板模板模板模板模板禁用接口
    //82. 用户积分规则模板模板模板模板模板查询接口
    //83. 用户积分规则模板模板模板模板模板导出接口
    //84. 用户积分规则模板模板模板模板模板导入接口
    //85. 用户积分规则模板模板模板模板模板模板接口
    //86. 用户积分规则模板模板模板模板模板模板新增接口
    //87. 用户积分规则模板模板模板模板模板模板删除接口
    //88. 用户积分规则模板模板模板模板模板模板修改接口
    //89. 用户积分规则模板模板模板模板模板模板启用接口
    //90. 用户积分规则模板模板模板模板模板模板禁用接口
    //91. 用户积分规则模板模板模板模板模板模板查询接口
    //92. 用户积分规则模板模板模板模板模板模板导出接口
    //93. 用户积分规则模板模板模板模板模板模板导入接口
    //94. 用户积分规则模板模板模板模板模板模板模板接口
    //95. 用户积分规则模板模板模板模板模板模板模板新增接口
    //96. 用户积分规则模板模板模板模板模板模板模板删除接口
    //97. 用户积分规则模板模板模板模板模板模板模板修改接口
    //98. 用户积分规则模板模板模板模板模板模板模板启用接口
    //99. 用户积分规则模板模板模板模板模板模板模板禁用接口
    //100. 用户积分规则模板模板模板模板模板模板模板查询接口
    //101. 用户积分规则模板模板模板模板模板模板模板导出接口
    //102. 用户积分规则模板模板模板模板模板模板模板导入接口
    //103. 用户积分规则模板模板模板模板模板模板模板模板接口
    //104. 用户积分规则模板模板新增接口
    //105. 用户积分规则模板模板删除接口
    //106. 用户积分规则模板模板修改接口
    //107. 用户积分规则模板模板启用接口
    //108. 用户积分规则模板模板禁用接口
    //109. 用户积分规则模板模板查询接口
    //110. 用户积分规则模板模板导出接口
    //111. 用户积分规则模板模板导入接口
    //112. 用户积分规则模板模板模板接口
    //113. 用户积分规则模板模板模板新增接口
    //114. 用户积分规则模板模板模板删除接口
    //115. 用户积分规则模板模板模板修改接口
    //116. 用户积分规则模板模板模板启用接口
    //117. 用户积分规则模板模板模板禁用接口
    //118. 用户积分规则模板模板模板查询接口
    //119. 用户积分规则模板模板模板导出接口
    //120. 用户积分规则模板模板模板导入接口
    //121. 用户积分规则模板模板模板模板接口
    //122. 用户积分规则模板模板模板模板新增接口
    //123. 用户积分规则模板模板模板模板删除接口
    //124. 用户积分规则模板模板模板模板修改接口
    //125. 用户积分规则模板模板模板模板启用接口
    //126. 用户积分规则模板模板模板模板禁用接口
    //127. 用户积分规则模板模板模板模板查询接口
    //128. 用户积分规则模板模板模板模板导出接口
    //129. 用户积分规则模板模板模板模板导入接口
    //130. 用户积分规则模板模板模板模板模板接口
    //131. 用户积分规则模板模板模板模板模板新增接口
    //132. 用户积分规则模板模板模板模板模板删除接口



    //TODO: 实现用户相关接口的单元测试
}
